package com.test;

import java.lang.reflect.Constructor;

/**
 * Bean实例化上下文类，负责记录和执行Bean的实例化过程
 * 它通过保存一个构造函数和一组参数，以便在需要时使用这些信息来实例化Bean
 */
public class BeanInstantiationContext {
    // 记录用于实例化Bean的构造函数
    private final Constructor<?> constructor;
    // 记录构造函数的参数
    private final Object[] args;

    /**
     * 构造函数，初始化Bean实例化上下文
     *
     * @param constructor 要使用的构造函数
     * @param args 构造函数的参数
     */
    public BeanInstantiationContext(Constructor<?> constructor, Object[] args) {
        this.constructor = constructor;
        this.args = args;
    }

    /**
     * 使用记录的构造函数和参数实例化Bean
     *
     * @return 实例化的Bean对象
     * @throws Exception 如果实例化过程中发生错误
     */
    public Object instantiate() throws Exception {
        return constructor.newInstance(args);
    }

    /**
     * 获取记录的构造函数
     *
     * @return 记录的构造函数
     */
    public Constructor<?> getConstructor() {
        return constructor;
    }

    /**
     * 获取构造函数的参数
     *
     * @return 构造函数的参数数组
     */
    public Object[] getArgs() {
        return args;
    }
}
